﻿using System;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using ACM.Dataset.CDBNames;
using System.Collections.Generic;
using Newtonsoft.Json;

/// <summary>
/// Summary description for TOPICA_Web_Payment_Service
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class TOPICA_Web_Payment_Service : System.Web.Services.WebService
{
    private void write_log(Exception ip_e)
    {
        Business.Log.Logger.Instance.Write(ip_e.Message);
    }
    public TOPICA_Web_Payment_Service()
    {

        //Uncomment the following line if using designed components 
        //InitializeComponent(); 
    }

    /// <summary>
    /// Hàm kích hoạt thẻ Amazing qua Web
    /// </summary>
    /// <param name="ip_str_ma_kich_hoat"></param>
    /// <param name="ip_str_account_kich_hoat"></param>
    /// <param name="ip_str_mobile_kich_hoat"></param>
    /// <returns></returns>
    [WebMethod(Description = "Hàm kích hoạt thẻ Amazing qua Web. Output: TAI_KHOAN_AMAZING_KHONG_DUNG, KHONG_CO_QUYEN_TRUY_CAP_API_TSM"
                  + ", CALL_API_TSM_BI_LOI, MA_THE_KHONG_DUNG"
                   + ", MA_THE_HET_HAN, MA_THE_DA_SU_DUNG, GIAO_DICH_KHONG_THANH_CONG, KICH_HOAT_THE_1_THANG_THANH_CONG"
                    + ", KICH_HOAT_THE_3_THANG_THANH_CONG, KICH_HOAT_THE_6_THANG_THANH_CONG"
                    + ", KICH_HOAT_THE_12_THANG_THANH_CONG", EnableSession = false)]
    public string KichHoatTheQuaWeb(string ip_str_user_name
                                    , string ip_str_password
                                    , string ip_str_ma_kich_hoat
                                    , string ip_str_account_kich_hoat)
    {
        string v_str_ket_qua_kich_hoat = "";
        try
        {
            // 0 . Kiểm tra username và password sử dụng services
            if (ip_str_user_name.Equals(C_USER_KichHoatTheQuaWeb.C_USER_NAME) && ip_str_password.Equals(C_USER_KichHoatTheQuaWeb.C_PASS_WORD))
            {
                //1. Kiểm tra account amazing người dùng cần kích hoạt có tồn tại không qua API phinv
                WS_TSM.TestService v_ws_tsm = new WS_TSM.TestService();
                WS_TSM.UserCredentials v_ws_user = new WS_TSM.UserCredentials();
                v_ws_user.userName = "acm_amazing";
                v_ws_user.password = "acm123@";
                //string v_str_user_service = "phinv";
                string v_str_ket_qua = "";
                v_ws_tsm.UserCredentialsValue = v_ws_user;
                try
                {
                    v_str_ket_qua = v_ws_tsm.CheckExitsUser(ip_str_account_kich_hoat);
                }
                catch (Exception v_e)
                {
                    v_str_ket_qua_kich_hoat = C_MESS_KET_QUA_KICH_HOAT.C_CALL_API_TSM_BI_LOI;
                    write_log(v_e);
                    return v_str_ket_qua_kich_hoat;
                }
                //string v_str_ket_qua = "1";
                if (v_str_ket_qua == "0") v_str_ket_qua_kich_hoat = C_MESS_KET_QUA_KICH_HOAT.C_TAI_KHOAN_AMAZING_KHONG_DUNG;
                else if (v_str_ket_qua == "9") v_str_ket_qua_kich_hoat = C_MESS_KET_QUA_KICH_HOAT.C_KHONG_CO_QUYEN_TRUY_CAP_API_TSM;
                else if (v_str_ket_qua == "1")
                {
                    //3. Kích hoạt mã thẻ
                    //3.1. Tạo một giao dịch kích hoạt mã thẻ: validate trong CSDL rồi
                    US_GD_KICH_HOAT_THE v_us_gd_kich_hoat = new US_GD_KICH_HOAT_THE();
                    try
                    {
                        v_us_gd_kich_hoat.open_connection();
                        decimal v_dc_id_giao_dich = 0;
                        string v_str_mRID = "";
                        string v_str_loai_thoi_han = "";
                        string v_str_ket_qua_gd = v_us_gd_kich_hoat.GD_KichHoatQuaWeb(ip_str_ma_kich_hoat
                                                                        , ip_str_account_kich_hoat
                                                                        , ref v_dc_id_giao_dich
                                                                        , ref v_str_loai_thoi_han);
                        v_us_gd_kich_hoat.commit_close_connection();
                        // Đoạn này cần kiểm tra việc gia hạn thẻ thành công, nếu gia hạn thành công thì thực hiện gọi API gia hạn trong server Game
                        if (v_str_ket_qua_gd == C_MESS_KET_QUA_KICH_HOAT.C_INSERT_GIAO_DICH_THANH_CONG)
                        {
                            //3.2. Call API TSM để gia hạn trong GAME SERVER
                            try
                            {
                                // Đây là kết quả trả về khi thực hiện gia hạn trong server game
                                string v_str_ket_qua_api = "";
                                string v_str_ket_qua_json = "";
                                // Lấy dữ liệu: trả về dạng Json
                                try
                                {
                                    v_str_ket_qua_json = v_ws_tsm.GetAllServicesByType("MEMBER_SHIP");
                                }
                                catch (Exception v_e)
                                {
                                    v_str_ket_qua_kich_hoat = C_MESS_KET_QUA_KICH_HOAT.C_CALL_API_TSM_BI_LOI;
                                    write_log(v_e);
                                    return v_str_ket_qua_kich_hoat;
                                }
                                // Bước tiếp theo: chuyển đổi dạng Json sang List
                                List<CServiceInfo> v_list_service = JsonConvert.DeserializeObject<List<CServiceInfo>>(v_str_ket_qua_json);
                                // Đoạn này là đoạn dựa vào loại thời hạn thẻ để lấy ra được mRID trong list vừa thu đc từ chuỗi Json
                                // Nếu thời hạn trả về là 1 tháng
                                if (v_str_loai_thoi_han == C_LOAI_THOI_HAN_THE.C_THE_1_THANG)
                                {
                                    for (int v_i = 0; v_i < v_list_service.Count; v_i++)
                                    {
                                        if (v_list_service[v_i].ServicesCode == C_SERVICE_CODE_THOI_HAN_THE.C_1_THANG)
                                        {
                                            v_str_mRID = v_list_service[v_i].mRID;
                                            break;
                                        }
                                    }
                                }
                                else if (v_str_loai_thoi_han == C_LOAI_THOI_HAN_THE.C_THE_3_THANG)
                                {
                                    for (int v_i = 0; v_i < v_list_service.Count; v_i++)
                                    {
                                        if (v_list_service[v_i].ServicesCode == C_SERVICE_CODE_THOI_HAN_THE.C_3_THANG)
                                        {
                                            v_str_mRID = v_list_service[v_i].mRID;
                                            break;
                                        }
                                    }
                                }
                                else if (v_str_loai_thoi_han == C_LOAI_THOI_HAN_THE.C_THE_6_THANG)
                                {
                                    for (int v_i = 0; v_i < v_list_service.Count; v_i++)
                                    {
                                        if (v_list_service[v_i].ServicesCode == C_SERVICE_CODE_THOI_HAN_THE.C_6_THANG)
                                        {
                                            v_str_mRID = v_list_service[v_i].mRID;
                                            break;
                                        }
                                    }
                                }
                                else if (v_str_loai_thoi_han == C_LOAI_THOI_HAN_THE.C_THE_12_THANG)
                                {
                                    for (int v_i = 0; v_i < v_list_service.Count; v_i++)
                                    {
                                        if (v_list_service[v_i].ServicesCode == C_SERVICE_CODE_THOI_HAN_THE.C_12_THANG)
                                        {
                                            v_str_mRID = v_list_service[v_i].mRID;
                                            break;
                                        }
                                    }
                                }
                                else v_str_mRID = "";
                                // Nếu không tìm thấy mRID phù hợp
                                if (v_str_mRID.Equals(""))
                                {
                                    v_str_ket_qua_kich_hoat = C_MESS_KET_QUA_KICH_HOAT.C_GIAO_DICH_KHONG_THANH_CONG;
                                    return v_str_ket_qua_kich_hoat;
                                }
                                try
                                {
                                    v_str_ket_qua_api = v_ws_tsm.AddServices(ip_str_account_kich_hoat, v_str_mRID);
                                }
                                catch (Exception v_e)
                                {
                                    v_str_ket_qua_kich_hoat = C_MESS_KET_QUA_KICH_HOAT.C_CALL_API_TSM_BI_LOI;
                                    write_log(v_e);
                                    return v_str_ket_qua_kich_hoat;
                                }
                                // Trả về 1 nghĩa là add service(gia hạn) thành công
                                if (v_str_ket_qua_api == "\"1\"")
                                {
                                    US_GD_KICH_HOAT_THE v_us_submit_giao_dich = new US_GD_KICH_HOAT_THE();
                                    // Gia hạn trong Game Server công thì submit trạng thái giao dịch và thông báo cho khách hàng
                                    try
                                    {
                                        v_us_submit_giao_dich.open_connection();
                                        string v_str_loai_the = v_us_submit_giao_dich.GD_SubmitThanhCong(v_dc_id_giao_dich, ip_str_ma_kich_hoat);
                                        v_us_submit_giao_dich.commit_close_connection();
                                        v_str_ket_qua_kich_hoat = v_str_loai_the;
                                    }
                                    catch (Exception)
                                    {
                                        if (v_us_gd_kich_hoat.is_having_connection()) v_us_gd_kich_hoat.rollback_close_connection();
                                        if (v_us_submit_giao_dich.is_having_connection()) v_us_submit_giao_dich.rollback_close_connection();
                                        v_str_ket_qua_kich_hoat = C_MESS_KET_QUA_KICH_HOAT.C_GIAO_DICH_KHONG_THANH_CONG;
                                    }
                                }
                                else
                                {
                                    // Gia hạn trong Game Server không thành công thì chỉ cần thông báo cho khách hàng
                                    v_str_ket_qua_kich_hoat = C_MESS_KET_QUA_KICH_HOAT.C_GIAO_DICH_KHONG_THANH_CONG;
                                }
                            }
                            catch (Exception v_e)
                            {
                                v_str_ket_qua_kich_hoat = C_MESS_KET_QUA_KICH_HOAT.C_CALL_API_TSM_BI_LOI;
                                write_log(v_e);
                            }
                        }
                        else
                        {
                            v_str_ket_qua_kich_hoat = v_str_ket_qua_gd;
                        }
                    }
                    catch (Exception v_e)
                    {
                        if (v_us_gd_kich_hoat.is_having_connection()) v_us_gd_kich_hoat.rollback_close_connection();
                        v_str_ket_qua_kich_hoat = C_MESS_KET_QUA_KICH_HOAT.C_GIAO_DICH_KHONG_THANH_CONG;
                        write_log(v_e);
                    }
                }
                else v_str_ket_qua_kich_hoat = C_MESS_KET_QUA_KICH_HOAT.C_GIAO_DICH_KHONG_THANH_CONG;

                return v_str_ket_qua_kich_hoat;
            }
            else  // nếu mật khẩu không đúng?
            {
                v_str_ket_qua_kich_hoat = C_MESS_KET_QUA_KICH_HOAT.C_KHONG_CO_QUYEN_TRUY_CAP_API_ACM;
            }
        }
        catch (Exception v_e)
        {
            v_str_ket_qua_kich_hoat = C_MESS_KET_QUA_KICH_HOAT.C_GIAO_DICH_KHONG_THANH_CONG;
            write_log(v_e);
        }
        return v_str_ket_qua_kich_hoat;
    }
}

